package com.lcx.plugin.actions;

import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.lcx.plugin.dict.GlobalDict;
import com.lcx.plugin.dto.DbConfigDTO;
import com.lcx.plugin.enums.DatabaseType;
import com.lcx.plugin.tool.CacheDataUtils;
import com.lcx.plugin.ui.SelectFile;
import lombok.NoArgsConstructor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.awt.event.KeyEvent;
import java.util.Objects;

/**
 * 直接生成sql
 *
 * @author daxiong
 * @date 2023/6/21 下午2:27
 */
@NoArgsConstructor
public class MainAction extends AnAction {

    /**
     * 缓存数据工具类
     */
    private final CacheDataUtils cacheDataUtils = CacheDataUtils.getInstance();

    /**
     * 构造方法
     *
     * @param text 菜单名称
     */
    MainAction(@Nullable String text) {
        super(text);
    }

    /**
     * 处理方法
     *
     * @param event 事件对象
     */
    @Override
    public void actionPerformed(@NotNull AnActionEvent event) {
        Project project = event.getProject();
        if (project == null) {
            return;
        }
        if (event.getInputEvent() instanceof KeyEvent) {
            // 如果是直接快捷键触发的，则设置默认的数据库类型
            DbConfigDTO dbConfig = cacheDataUtils.getDbConfig();
            if (Objects.isNull(dbConfig)) {
                dbConfig = new DbConfigDTO();
            }
            dbConfig.setDbType(DatabaseType.MYSQL.getDbType());
            cacheDataUtils.setDbConfig(dbConfig);
        }
        // 校验数据库是否支持
        if (!DatabaseType.supportDbType(cacheDataUtils.getDbConfig().getDbType())) {
            Messages.showWarningDialog("不支持的数据库类型！", GlobalDict.TITLE_INFO);
            return;
        }
        // 直接生成sql语句
        cacheDataUtils.setSql2Clipboard(true);
        // 开始处理
        new SelectFile(project).show();
    }

}
